package com.thy.controller;


import com.hospital.common.base.PageResult;
import com.hospital.common.base.Result;
import com.hospital.common.base.ThreadAttributes;
import com.hospital.common.dto.management.module.InitPatientInfoDto;
import com.hospital.common.dto.management.module.PatientInfoDto;
import com.hospital.common.utils.ThreadLocalUtils;
import com.hospital.common.vo.management.module.PatientInfoVo;
import com.thy.service.TPatientInfoService;
import com.thy.service.TUserService;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 患者信息 前端控制器
 * </p>
 *
 * @author author
 * @since 2025-09-13
 */
@RestController
@RequestMapping("/patient/info")
public class TPatientInfoController {
    @Autowired
    private TPatientInfoService tPatientInfoService;
    @Autowired
    private TUserService tUserService;

    /**
     * 获取所有患者信息
     * <br> 管理员角色
     * @author iT唐
     * @param pageNum
     * @param pageSize
     * @return PageResult<PatientInfoVo>
     */
    @GetMapping("/getAllPatientInfo")
    public Result<PageResult<PatientInfoVo>> getAllPatientInfo(@RequestParam("pageNum")Integer pageNum, @RequestParam("pageSize")Integer pageSize){
        PageResult<PatientInfoVo> pageResult = tPatientInfoService.getAllPatientInfo(pageNum, pageSize);
        return Result.success(pageResult);
    }

    /**
     * 患者个人信息
     * <br> 患者角色
     * @author iT唐
     * @return PatientInfoVo
     */
     @GetMapping("/getPatientInfo")
     public Result<PatientInfoVo> getPatientInfo(){
         // 从线程本地变量中获取存入的用户信息
         ThreadAttributes threadAttributes  = ThreadLocalUtils.get();
         Long userId = threadAttributes.getUserId();
         PatientInfoVo patientInfoVo = tPatientInfoService.getPatientInfo(userId);
         return Result.success(patientInfoVo);
     }

    /**
     * 获取患者数量
     */
     @GetMapping("/getPatientCount")
      public Result<Long> getPatientCount(){
         return Result.success(tUserService.allPatientCount());
     }
     /**
     * 更新患者信息
     */
     @PostMapping("/updatePatientInfo")
      public Result<?> updatePatientInfo(@RequestBody PatientInfoDto patientInfoDto){
         tPatientInfoService.updatePatientInfo(patientInfoDto);
         return Result.success();
     }
     /**
     * 初始化患者信息
     */
     @PostMapping("/initPatientInfo")
      public Result<?> initPatientInfo(@Valid @RequestBody InitPatientInfoDto initPatientInfoDto){
         tPatientInfoService.initPatientInfo(initPatientInfoDto);
         return Result.success();
     }
}
